<?php

class FacturaController extends Controller
{
	/**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
	public $layout='//layouts/column2';

	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
			'postOnly + delete', // we only allow deletion via POST request
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view'),
				'users'=>array('*'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('create','update'),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete','listado','factura','crearNueva','cargarMisPrestaciones'),
				'users'=>array('admin'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer the ID of the model to be loaded
	 */
	public function loadModel($id)
	{
		$model=Factura::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

	/**
	 * Performs the AJAX validation.
	 * @param CModel the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='factura-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
        
        
        /************************************************************/
        /************************************************************/
        /************************************************************/
        
        /**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
          try{
            $this->loadModel($id)->delete();
            
            $logs = new LogsTransacciones;
            $logs->tabla = Yii::app()->getController()->getId();
            $logs->fecha = date('Y-m-d');
            $logs->usuario =  Yii::app()->user->name;
            $logs->operacion = 'BAJA';
            $logs->comentarios = 'BAJA - ' . $id;
            $logs->save();
            
            if(!isset($_GET['ajax']))
                Yii::app()->user->setFlash('success','EXITO!!!. La eliminacion fue Exitosa.');
            else{
                 echo CJSON::encode(array(
                         'result'=>1,
                        ));
                    Yii::app()->end(); 
                    exit;
               }
           }catch(CDbException $e)
           {
            
            if(!isset($_GET['ajax']))
                Yii::app()->user->setFlash('error','ERROR!!! No se puedo realizar la eliminacion!!!');
            else{
                {
                 echo CJSON::encode(array(
                         'result'=>0,
                        ));
                    Yii::app()->end(); 
                    exit;
               }
            }
           }
           
           // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
           if(!isset($_GET['ajax']))
                $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
	} //FIN DEL DELETE
        
         /************************************************************/
         /************************************************************/
        
        /**
	 * Manages all models.
	 */
	public function actionListado()
	{
		$model=new Factura('search');
		$model->unsetAttributes();  
                
                if (isset($_GET["estado"]))
                {
                    $estado = $_GET["estado"];
                    if (($estado=='A') || ($estado=='C') || ($estado=='X')){
                      $model->estado = $estado;}
                    if (($estado=='1') || ($estado=='2') || ($estado=='3') || ($estado=='4'))  
                        $model->id_tipofactura =(int) $estado; 
            
                }  
                
		if(isset($_GET['Factura']))
		   $model->attributes=$_GET['Factura'];

		$this->render('admin',array(
			'model'=>$model,
		));
	} // FIN DE ACTION LISTADO
        
        
         public function actionFactura($id)
	{
          $transaction = Yii::app()->db->beginTransaction();
          try{ 
		$model=$this->loadModel($id);
                
                //creamos un dataprovider para desplegar llos rsultados de las prestaciones asociadas a dicha factura en un CGridView
                $criteria=new CDbCriteria;
                $criteria->condition = 'id_factura ='. $id;
                $criteria->order = 'fecha_prestacion DESC'; 
               //  $dataMisPrestaciones = new CActiveDataProvider(PrestacionBrindada::model(),array('criteria'=>$criteria));   
		
                
                 $dataMisPrestaciones = new CActiveDataProvider(PrestacionBrindada::model(),array('criteria'=>$criteria));   
		

                if (isset($_GET["operacion"])){
                    $estado = $_GET["operacion"];
                    $model->estado = $estado;
                    
                    if ($estado=='A'){   
                      $criteria=new CDbCriteria;
                      $criteria->condition = 'id_factura ='. $id;
                      //$mis_prestaciones = PrestacionBrindada::model()->findAll($criteria);
                      $mis_prestaciones = PrestacionBrindada::model()->findAll($criteria);
                      $monto_total = 0;
                      $monto_debitado = 0;
                      foreach($mis_prestaciones as $prestacion){
                         $monto_total += $prestacion->monto;  
                         $monto_debitado += $prestacion->monto_debitado;                           
                      }
                      $model->monto_prefactura = $monto_total;
                      $model->debitado = $monto_debitado;
                      $model->total = $monto_total - $monto_debitado;
                      
                    }
                    
                    if ($estado=='C'){   
                      $criteria=new CDbCriteria;
                      $criteria->condition = 'id_factura ='. $id;
                      //$mis_prestaciones = PrestacionBrindada::model()->findAll($criteria);
                      $mis_prestaciones = PrestacionBrindada::model()->findAll($criteria);
                      $monto_total = 0;
                      $monto_debitado = 0;
                      foreach($mis_prestaciones as $prestacion){
                         $monto_total += $prestacion->monto;  
                         $monto_debitado += $prestacion->monto_debitado;                           
                      }
                      $model->monto_prefactura = $monto_total;
                      $model->debitado = $monto_debitado;
                      $model->total = $monto_total - $monto_debitado;
                    }
                    
                     if ($estado=='X'){   
                      $criteria=new CDbCriteria;
                      $criteria->condition = 'id_factura ='. $id;
                      //$mis_prestaciones = PrestacionBrindada::model()->findAll($criteria);
                        $mis_prestaciones = PrestacionBrindada::model()->findAll($criteria);
                      foreach($mis_prestaciones as $prestacion){
                         $prestacion->id_factura = null;
                         $prestacion->save();
                      }
                      $model->monto_prefactura = 0;
                      $model->debitado = 0;
                      $model->total = 0;
                    }
                    
                   
                    
                    $model->save();
                    $transaction->commit();
                    $this->redirect(array('factura',
			'id'=>$model->id,
                    ));
                }
                
                //si recibimos unh rdirect por modificaion de datos, solo se podran modificar la descripcion
		if(isset($_POST['Factura']))
		{
			$model->attributes=$_POST['Factura'];
			if($model->save()){
                            
                                $transaction->commit();
				$this->redirect(array('view','id'=>$model->id));}
		}
                
                

		$this->render('create',array(
			'model'=>$model,
                        'misPrestaciones'=>$dataMisPrestaciones,
               ));
           }catch(CDbException $e)
           {
            $transaction->rollBack();
             
            if(!isset($_GET['ajax']))
                Yii::app()->user->setFlash('error','ERROR!!! No se puedo realizar la eliminacion!!!');
            else
                {
                 echo CJSON::encode(array(
                         'result'=>0,
                         'result_texto'=>'NO se pudo realizar la Eliminacion',
                        ));
                    Yii::app()->end(); 
                    exit;
               }
            
           }
                
                
                
	}
        
        
        
        
          /**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
        
	public function actionCrearNueva()
	{
		$model=new Factura;
                $model->fecha_factura = date('d-m-Y');
		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Factura']))
		{
			$model->attributes = $_POST['Factura'];     
                        $model->id_efector = (int) $model->id_efector;
                        $model->id_tipofactura = (int) $model->id_tipofactura;
                        $model->monto_prefactura = 0;
                        $model->debitado = 0;
                        $model->total = 0;
                        $periodos = '01/'.$model->periodo;
                        $periodos = str_replace("/","-",$periodos);
                        $model->periodo = $periodos;
                        
                        $model->estado = 'A';
                        $model->trabada = "0";  
                    
                        $model->fecha_carga = date('d-m-Y');
                       
                        
			if($model->save()) //si lo grabo lo redirigimos a la accion factura donde se desplegarabn y podra actualizar los datos
				$this->redirect(array('factura','id'=>$model->id));
		}
                
                  
                  $dataMisPrestaciones = new CActiveDataProvider(PrestacionBrindada::model());//creamos un dataProvider Vacio  para supuestamente mostrar las prstaciones asociadas a la factura

		  $this->render('create',array(
			                    'model'=>$model,   
                                            'misPrestaciones'=>$dataMisPrestaciones,
		        ));
	}
        
        public function actionCargarMisPrestaciones()
	{
	    if (isset($_POST["idfact"]))
            {
                 $idfact = $_POST["idfact"];
                 $model_factura = Factura::model()->findByPk($idfact);
                
                 $fecha = explode("-",$_POST["periodo"]); 
                 $fechamenor = $fecha[2] .'-'. $fecha[1] . '-01';
                 $mes = $fecha[1];
                 $anio = $fecha[2];
                 if ($mes==12){
                     $mes = '01';
                     $anio = $fecha[2] + 1;
                 }
                 else{
                     $mes = $mes + 1;
                     if ($mes<10)
                       $mes = '0'.$mes;
                              
                 }
                 $fechamayor = $anio.'-'. $mes. '-01'; 
                 //$criteria=new CDbCriteria;
                 //$criteria->condition = '(id_factura IS NULL OR id_factura = 0) and (id_efector = :efec) and ((fecha_prestacion >= :fechamenor) and (fecha_prestacion < :fechamayor))';
                 //$criteria->params = array(':efec'=> $model_factura->id_efector, ':fechamenor' => $fechamenor, ':fechamayor' => $fechamayor);
                 //$dataProvider = new CActiveDataProvider(PrestacionBrindada::model(),array('criteria'=>$criteria) 
                 
                 $criteria=new CDbCriteria;
                 $criteria->condition = '(id_factura IS NULL OR id_factura = 0) and (id_efector = :efec) and ((fecha_prestacion >= :fechamenor) and (fecha_prestacion < :fechamayor))';
                 $criteria->params = array(':efec'=> $model_factura->id_efector, ':fechamenor' => $fechamenor, ':fechamayor' => $fechamayor);
                 $dataProvider = new CActiveDataProvider(PrestacionBrindada::model(),array('criteria'=>$criteria) 
                 
                 );

                
            }
            
             if (isset($_POST["Seleccionar_all"]) && (!empty($_POST["Seleccionar_all"]))){
                  $todasPrestaciones = PrestacionBrindada::model()->findAll($criteria);
                  foreach ($todasPrestaciones as $prestacion){
                        $modelPrestacion = PrestacionBrindada::model()->findByPk($prestacion->id);
                        $modelPrestacion->id_factura=$idfact;
                        $modelPrestacion->save(); 
                  }
                  echo CJSON::encode(array(
                    'status'=>'OK', 
                    'div'=>'OK'));               
                  exit; 
             }
             else
             if (isset($_POST["Seleccionar"]) && (!empty($_POST["Seleccionar"])))
             {
                foreach ($_POST["Seleccionar"] as $key => $value)
                {
                  $modelPrestacion = PrestacionBrindada::model()->findByPk($value);
                  $modelPrestacion->id_factura=$idfact;
                  $modelPrestacion->save();                    
                }
                echo CJSON::encode(array(
                    'status'=>'OK', 
                    'div'=>'OK'));               
                exit; 
             }
           
                
           
                
           if (Yii::app()->request->isAjaxRequest)
           {
             echo CJSON::encode(array(
                'status'=>'formulario', 
                'div'=>$this->renderPartial('misPrestaciones', array('dataProvider'=>$dataProvider,'idfact'=>$idfact), true)));               
                exit;               
           }        
        }
        
        
        
         public function actionDesasociarPrestacion()
	{
           if (Yii::app()->request->isAjaxRequest)
           {
	    if (isset($_GET["idPrestacion"]))
            {
                  $idPrestacion = $_GET["idPrestacion"];
                  //$model_prestacion = PrestacionBrindada::model()->findByPk($idPrestacion);
                
                  $model_prestacion = PrestacionesBrindadasViejas::model()->findByPk($idPrestacion);
                  $model_prestacion->id_factura = null;
                  $model_prestacion->save();
                   echo CJSON::encode(array(
                    'status'=>'OK', 
                    'div'=>'OK'));               
                    exit; 
            }            
         }             
               
        }
        
        
        
         public function cellColor($objPHPExcel,$cells,$color){
          
            $objPHPExcel->getActiveSheet()->getStyle($cells)->getFill()->applyFromArray(array('type' => PHPExcel_Style_Fill::FILL_SOLID,'startcolor' => array('rgb' => $color) ));
        }
    
        public function actionExportarExcel($id){
             $connection = Yii::app()->db;
             
             $sql = "SELECT benef.apellido, benef.nombre, benef.numero_documento, benef.fecha_nacimiento,
                            pat.codigo as codigopatologia, pat.descripcion as descripcionpatologia, 
                            pres.codigo as codigoprestacion, pres.descripcion as descripcionprestacion, 
                            id_beneficiario, fecha_prestacion, pb.monto as precio                            
                        FROM facturacion.prestaciones_brindadas_viejas as pb
                             INNER JOIN uad.persona as benef ON (benef.id = pb.id_beneficiario)
                             INNER JOIN nomenclador.prestaciones_permitidas1 as pp ON (pp.id = pb.id_prestaciontomada)
                             INNER JOIN nomenclador.prestaciones as pres ON (pres.id = pp.id_prestacion)
                             INNER JOIN nomenclador.patologia as pat ON (pat.id = pp.id_patologia)
                        WHERE id_factura = ".$id;
             
             $command = $connection->createCommand($sql);
             $result = $command->queryAll();
             
           
             if ( (!empty($result)) && (!empty($result)) ){
                $phpExcelPath = Yii::getPathOfAlias('ext.phpexcel.Classes');
                spl_autoload_unregister(array('YiiBase','autoload'));   
                include($phpExcelPath .'/PHPExcel.php');
                    
               $objPHPExcel = new PHPExcel();
               $objPHPExcel->setActiveSheetIndex(0);
               
               $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
               $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
               $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
               $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setAutoSize(true);
               $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setAutoSize(true);
               $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setAutoSize(true);
               $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setAutoSize(true);
               $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setAutoSize(true);
              
               $this->cellColor($objPHPExcel,'A1', 'F28A8C');
               $this->cellColor($objPHPExcel,'B1', 'F28A8C');
               $this->cellColor($objPHPExcel,'C1', 'F28A8C');
               $this->cellColor($objPHPExcel,'D1', 'F28A8C');
               $this->cellColor($objPHPExcel,'E1', 'F28A8C');
               $this->cellColor($objPHPExcel,'F1', 'F28A8C');
               $this->cellColor($objPHPExcel,'G1', 'F28A8C');
             
                
                
               $objPHPExcel->getActiveSheet()->setCellValue('A1','APELLIDO');
               $objPHPExcel->getActiveSheet()->setCellValue('B1','NOMBRE');
               $objPHPExcel->getActiveSheet()->setCellValue('C1','DNI');
               $objPHPExcel->getActiveSheet()->setCellValue('D1','FECHA NACIMIENTO');
               
                
               $objPHPExcel->getActiveSheet()->setCellValue('E1','PRESTACION');
               $objPHPExcel->getActiveSheet()->setCellValue('F1','PATOLOGIA');
               $objPHPExcel->getActiveSheet()->setCellValue('G1','PRECIO');
               
                
                
                $letracolumnainicio = 'A';
                $letrafilainicio = 3;
                
                foreach ($result as $beneficiario){
                    
                    $letrafilainicio1 = (string)$letrafilainicio; 
                    
                    $a = 'A'.$letrafilainicio1;
                    $b = 'B'.$letrafilainicio1;
                    $c = 'C'. $letrafilainicio1;
                    $d = 'D'. $letrafilainicio1;
                    $e = 'E'. $letrafilainicio1;
                    $f = 'F'. $letrafilainicio1;
                    $g = 'F'. $letrafilainicio1;
                    $this->cellColor($objPHPExcel,$a, 'F29981');
                    $this->cellColor($objPHPExcel,$b, 'F29981');
                    $this->cellColor($objPHPExcel,$c, 'F29981');
                    $this->cellColor($objPHPExcel,$d, 'F29981');
                    $this->cellColor($objPHPExcel,$e, 'F29981');
                    $this->cellColor($objPHPExcel,$f, 'F29981');
                    $this->cellColor($objPHPExcel,$g, 'F29981');
                 
                    $objPHPExcel->getActiveSheet()->setCellValue($a,$beneficiario['apellido']);
                    $objPHPExcel->getActiveSheet()->setCellValue($b,$beneficiario['nombre']);
                    $objPHPExcel->getActiveSheet()->setCellValue($c,$beneficiario['numero_documento']);
                    $objPHPExcel->getActiveSheet()->setCellValue($d,$beneficiario['fecha_nacimiento']);
                    
                    
                    $objPHPExcel->getActiveSheet()->setCellValue($e,$beneficiario['codigoprestacion'] . ' - ' . $beneficiario['descripcionprestacion']);
                    $objPHPExcel->getActiveSheet()->setCellValue($f,$beneficiario['codigopatologia'] . ' - ' . $beneficiario['descripcionpatologia']);
                    $objPHPExcel->getActiveSheet()->setCellValue($g,$beneficiario['precio']);
                    
                 
                        $letrafilainicio += 1; }
                        
                       
             
                        header('Content-Type: application/vnd.ms-excel');
                        header('Content-Disposition: attachment;filename="01simple.xls"');
                        header('Cache-Control: max-age=0');
                    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
                    $objWriter->save('php://output');
                     spl_autoload_register(array('YiiBase','autoload'));
                    Yii::app()->end();
                    
             }             
             }
                 
        
        
}
